package com.yeqing.client;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

/**
 * 通用 handler，处理 IO 事件
 */
// 这个注解是为了线程安全
@ChannelHandler.Sharable
// SimpleChannelInboundHandler 这里的类型可以是 ByteBuf 也可以是 String，还可以是对象
public class HandlerClientHello extends SimpleChannelInboundHandler<ByteBuf> {

    /**
     * 消息读取方法
     * @param channelHandlerContext 通道上下文，代指Channel
     * @param byteBuf 字节序列，通过 ByteBuf 操作基础的字节数组和缓冲区，
     *                因为 JDK 原生操作字节麻烦、效率低，所以 Netty 对字节的操作进行了封装，
     *                实现了指数级的性能提升，同时使用更加便利
     * @throws Exception
     */
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf) throws Exception {
        // CharsetUtil.UTF_8 字节数组转换为字符串时的编码格式
        System.out.println("接收到的消息:" + byteBuf.toString(CharsetUtil.UTF_8));
    }


    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
